const Router = require('koa-router')
const router = new Router({ prefix: '/api/glm4v' })
const axios = require('axios')

// 智能提示词生成器
function generateDetectionPrompt() {
  return `你是一个专业美食图像识别AI，请严格按以下要求分析图片：

【识别要求】
1. 识别菜品中文名称（需符合《中国菜谱》标准命名）
2. 分析以下维度：
   - 视觉评分（1-10分）：基于摆盘、色泽的专业评分
   - 热量估算（kcal）：根据可见食材科学估算
   - 烹饪耗时（分钟）：基于菜品复杂度估算
3. 分层识别食材：
   ◎ 主料（蛋白质/碳水来源）
   ◎ 辅料（蔬菜/配菜）
   ◎ 调料（酱汁/香料）
4. 推导烹饪步骤（3-5个关键步骤）

【输出规范】
返回严格遵循此结构的JSON：
{
  "name": "string        // 准确菜品名称（如：鱼香肉丝）",
  "score": "number 1-10  // 视觉评分",
  "calories": "number    // 热量估算",
  "prepTime": "string    // 如'30-45分钟'",
  "cookingMethod": [     // 推导步骤
    "步骤1描述",
    "步骤2描述"
  ],
  "ingredients": {       // 分层食材
    "主料": ["食材1及用量"], 
    "辅料": ["食材1及用量"],
    "调料": ["调料1及用量"]
  },
  "history": "string    // 历史渊源（50字以上）",
  "region": "string     // 所属菜系"
}
`.trim()
}

router.post('/analyze', async (ctx) => {
  try {
    const { imageBase64 } = ctx.request.body

    const response = await axios.post(
      'https://open.bigmodel.cn/api/paas/v4/chat/completions',
      {
        model: "glm-4v-flash",
        messages: [
          {
            role: "system",
            content: generateDetectionPrompt()
          },
          {
            role: "user",
            content: [
              { type: "text", text: "请分析此美食图片" },
              {
                type: "image_url",
                image_url: { url: imageBase64 }
              }
            ]
          }
        ]
      },
      {
        headers: {
          Authorization: `Bearer ${process.env.GLM_API_KEY}`,
          'Content-Type': 'application/json'
        },
        timeout: 30000
      }
    )

    const rawText = response.data.choices[0].message.content
    const parsedData = safeJsonParse(rawText)

    ctx.body = {
      success: true,
      data: formatFoodOutput(parsedData)
    }
  } catch (error) {
    ctx.status = 500
    ctx.body = {
      success: false,
      error: error.message
    }
  }
})

// 数据标准化处理
function formatFoodOutput(data) {
  return {
    name: validateName(data.name),
    score: clampScore(data.score),
    calories: Number(data.calories) || 0,
    prepTime: validatePrepTime(data.prepTime),
    cookingMethod: data.cookingMethod?.slice(0, 5) || [],
    ingredients: normalizeIngredients(data.ingredients),
    history: data.history?.replace(/\n/g, ' ') || '',
    region: data.region || '未知'
  }
}

// 校验菜品名称
function validateName(name) {
  return typeof name === 'string' && name.length > 1 ? name : '未知菜品'
}

// 限制评分范围
function clampScore(score) {
  return Math.min(10, Math.max(1, Number(score) || 5))
}

// 规范准备时间格式
function validatePrepTime(time) {
  if (!time) return '时间未知'
  return String(time).match(/\d+-\d+分钟/) ? time : '时间格式异常'
}

// 标准化食材结构
function normalizeIngredients(ingredients) {
  const defaultStructure = { 主料: [], 辅料: [], 调料: [] }
  if (!ingredients) return defaultStructure
  
  return {
    主料: ensureArray(ingredients.主料),
    辅料: ensureArray(ingredients.辅料),
    调料: ensureArray(ingredients.调料)
  }
}

function ensureArray(value) {
  return Array.isArray(value) ? value : []
}

// 保留原有的安全解析函数
function safeJsonParse(str) {
  try {
    const cleanStr = str.replace(/```json/g, '').replace(/```/g, '')
    return JSON.parse(cleanStr)
  } catch (e) {
    throw new Error('响应解析失败')
  }
}

module.exports = router